home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 7 / BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso / Files / Hyper / S-Sh / ScriptReader1.3.cpt / Script Reader 1.3 / stack.txt < prev   
Text File  |  1987-12-28  |  19KB  |  533 lines

  1. -- stack: in.3
  2. -- format: 8 (HyperCard 1)
  3. -- flags: 0x0 (none)
  4. -- protect password hash: 0
  5. -- maximum user level: 5 (scripting)
  6. -- window: Rect(x1=0, y1=0, x2=0, y2=0)
  7. -- screen: Rect(x1=0, y1=0, x2=0, y2=0)
  8. -- card dimensions: w=0 h=0
  9. -- scroll: x=0 y=0
  10. -- background count: 3
  11. -- first background id: 3993
  12. -- card count: 3
  13. -- first card id: 4424
  14. -- list block id: 2645
  15. -- print block id: 0
  16. -- font table block id: 0
  17. -- style table block id: 0
  18. -- free block count: 0
  19. -- free size: 0 bytes
  20. -- total size: 47296 bytes
  21. -- stack block size: 17408 bytes
  22. -- created by hypercard version: 0x00000000
  23. -- compacted by hypercard version: 0x00000000
  24. -- modified by hypercard version: 0x00000000
  25. -- opened by hypercard version: 0x00000000
  26. -- patterns[0]: 0x0000000000000000
  27. -- patterns[1]: 0x8000000008000000
  28. -- patterns[2]: 0x8800220088002200
  29. -- patterns[3]: 0x8888222288882222
  30. -- patterns[4]: 0x88AA22AA88AA22AA
  31. -- patterns[5]: 0xCCAA33AACCAA33AA
  32. -- patterns[6]: 0xEEAABBAAEEAABBAA
  33. -- patterns[7]: 0xEEBBBBEEEEBBBBEE
  34. -- patterns[8]: 0xFFBBFFEEFFBBFFEE
  35. -- patterns[9]: 0xFFBBFFFFFFBBFFFF
  36. -- patterns[10]: 0x8010022001084004
  37. -- patterns[11]: 0xFFFFFFFFFFFFFFFF
  38. -- patterns[12]: 0x8822882288228822
  39. -- patterns[13]: 0x1122448811224488
  40. -- patterns[14]: 0xC4800C6843023026
  41. -- patterns[15]: 0xB130031BD8C00C8D
  42. -- patterns[16]: 0xAA00AA00AA00AA00
  43. -- patterns[17]: 0x8822552288225522
  44. -- patterns[18]: 0x8855225588552255
  45. -- patterns[19]: 0x77DD77DD77DD77DD
  46. -- patterns[20]: 0x8000000000000000
  47. -- patterns[21]: 0xAA55AA55AA55AA55
  48. -- patterns[22]: 0x038448300C020101
  49. -- patterns[23]: 0x8244394482010101
  50. -- patterns[24]: 0x8814224188412214
  51. -- patterns[25]: 0x8080413E080814E3
  52. -- patterns[26]: 0x22048C7422179810
  53. -- patterns[27]: 0xBE808808EB088880
  54. -- patterns[28]: 0x25C8328964244C92
  55. -- patterns[29]: 0xA29C41BE2AC914EB
  56. -- patterns[30]: 0x40A00000040A0000
  57. -- patterns[31]: 0x8040200002040800
  58. -- patterns[32]: 0xAA00800088008000
  59. -- patterns[33]: 0xFF80808080808080
  60. -- patterns[34]: 0x081C22C180010204
  61. -- patterns[35]: 0xFF808080FF080808
  62. -- patterns[36]: 0xF87422478F172271
  63. -- patterns[37]: 0xBF00BFBFB0B0B0B0
  64. -- patterns[38]: 0xFF7FBE5DA2418000
  65. -- patterns[39]: 0xFAF5FAF5A050A050
  66. -- checksum: 0x0
  67. ----- HyperTalk script -----
  68. on openStack
  69.   hide menubar
  70.   hide msg window
  71.   hide tool window
  72.   hide pattern window
  73.   set the userLevel to 5
  74. end openStack
  75.  
  76.  
  77. on idle
  78.   if the short name of this card is "reader" then
  79.     if background field "StackNameField" is empty then signature
  80.   end if
  81.   pass idle
  82. end idle
  83.  
  84. on signature
  85.   put "by HyperPro" into background field "StackNameField"
  86.   put "19925 Stevens Creek Blvd. Cupertino, CA 95014" into background field "ObjectNameField"
  87.   show bkgnd button "hide buttons"
  88. end signature
  89.  
  90. on emptyThis -- "this" is The Script Reader.
  91.   global whereFrom
  92.   put "read" into whereFrom
  93.   send mouseUp to bkgnd button "empty reader"
  94.   signature
  95. end emptyThis
  96.  
  97. on learnName --gets the name of the target stack
  98.   global targetStack,totalCards,totalBacks,targetLongName,targetShortName
  99.   global thisStack --1.2
  100.   set cursor to 4
  101.   -- thisStack = the path name of the Script Reader stack
  102.   put the long name of this stack into fixName
  103.   --correcting the returned stack name to match
  104.   -- the format returned by the XCMD below.
  105.   delete word 1 of fixName --killing the word "stack" & the space
  106.   delete char 1 of fixName --killing the quote
  107.   delete last char of fixName -- killing the quote
  108.   put fixName into thisStack
  109.  
  110.   get fileName ("STAK") --XCMD written by Steve Maller (Thanks!)
  111.   if it is empty then exit to hypercard -- user has cancelled
  112.  
  113.   if it is thisStack then --1.2
  114.     answer "Sorry, you can only read a COPY of this stack!" --1.2
  115.     put empty into it
  116.     learnName
  117.     exit learnName
  118.   end if
  119.   set cursor to 4
  120.   put it into targetStack --1.2
  121.   put targetStack into targetLongName --saving the pathname for later
  122.   set lockMessages to true
  123.   set lockScreen to true
  124.   set lockRecent to true
  125.   push card
  126.   go to stack targetStack
  127.  
  128.   put the short name of this stack into targetShortName
  129.   put the number of cards into totalCards
  130.   put the number of backgrounds into totalBacks
  131.  
  132.   pop card -- Returning to paste the info & to see if you
  133.   --                    want to continue
  134.   put targetLongName into field stackNameField
  135.   put "Statistics of the Stack" into field "ObjectNameField"
  136.   repeat with i = 1 to 10
  137.     --pushing the text down so it can be read under the coming alert
  138.     put return before field ScriptField
  139.   end repeat
  140.  
  141.   if totalCards is 1 then          --formatting the measure
  142.     put " card." into totCard
  143.   else
  144.     put " cards." into totCard
  145.   end if
  146.  
  147.   if totalBacks is 1 then         --formatting the measure
  148.     put " background." into totBack
  149.   else
  150.     put " backgrounds." into totBack
  151.   end if
  152.  
  153.  
  154.   put "Contains " & totalBacks & totBack & return after field ScriptField
  155.   put "Contains " & totalCards & totCard after field ScriptField
  156.   put return after field ScriptField
  157.  
  158.   --check to see if you want to go on
  159.  
  160.   set lockScreen to false
  161.   answer "Want to continue?" with "No" or "Yes"
  162.   if it is "No" or it is empty then
  163.     moveUp
  164.     cleanUp -- which exits
  165.   end if
  166.   -- you want to continue & we get ready to get scripts
  167.   moveUp
  168.   doMenu "New Card"
  169. end learnName
  170.  
  171. on readStack
  172.   global targetStack,totalCards,totalBacks,targetLongName,thisStack
  173.   global backScripts,cardScripts,targetShortName
  174.   --thisStack is the entire pathname of Script Reader
  175.  
  176.   put targetShortName into field StackNameField
  177.   put "Script of stack" into field ObjectNameField
  178.  
  179.   -- now get the script, test for empty,
  180.   -- then put it in the scrolling field
  181.   set cursor to 4
  182.   get script of stack targetStack
  183.   if it is empty then put "No stack script." into it
  184.   put it into field "ScriptField"
  185.   set lockMessages to true
  186.   set lockScreen to true
  187.   push card
  188.  
  189.   --================= In the target stack here ==================
  190.   go stack targetStack
  191.  
  192.   readBackgrounds --gets all scripts of backgrounds & objects
  193.   readCards --gets all scripts of cards & objects
  194. end readStack
  195.  
  196. on readBackgrounds
  197.   global targetStack,totalCards,totalBacks,targetLongName,thisStack
  198.   global backScripts,deLim1,deLim2,targetShortName
  199.  
  200.   --============== getting the background scripts =============
  201.   makeDeLim                             -- creates the delimiters
  202.   put empty into backgndName            --initializing the variable
  203.   put "Quietly loading scripts into RAM. This may take a while..."
  204.   repeat with i = 1 to totalBacks
  205.     go card 1 of bkgnd i
  206.     cursorwatch
  207.     get the short name of this background --form= bkgnd id ## or name
  208.     if word 2 of it is "id" then
  209.       put "No Name" into backgndName
  210.     else
  211.       put it into backgndName
  212.     end if
  213.  
  214.     put "Script of Background " & i & ", " & "ID #" && the id of this bkgnd & " (" & backgndName & ")" & return after backScripts
  215.  
  216.     get script of this bkgnd
  217.     if it is empty then put "No background script." & return into it
  218.     put it & return & deLim2 & return after backScripts -- end of bkgnd
  219.  
  220.     if (the number of fields) <> 0 then readBackFields
  221.     else put "No background fields." & return & return after backScripts
  222.     if (the number of bkgnd buttons) <> 0 then readBackButtons
  223.     else put "No background buttons." & return & return after backScripts
  224.  
  225.     put deLim1 & return after backScripts
  226.     -- marks end of bkgnds
  227.   end repeat --end of backgrounds
  228. end readBackgrounds
  229.  
  230. on readCards
  231.   global targetStack,totalCards,totalBacks,targetLongName,thisStack
  232.   global cardScripts,deLim1,deLim2,targetShortName
  233.   --deLim1 marks the end of the card(s)
  234.   --deLim2 marks the end of the object inside the card(s)
  235.   go card 1 -- of target stack, natch
  236.  
  237.   --============= getting the card scripts =================
  238.  
  239.   repeat with i = 1 to (the number of cards)
  240.     cursorwatch
  241.     get the short name of this card -- form= card id # or name
  242.     if word 2 of it is "id" then
  243.       put "Script of Card Number " & i  & ", " & "ID #" && (the short id of this card) & " (No Name)" & return after cardScripts
  244.     else
  245.       put "Script of Card Number " & i & ", " & "ID #" && (the short id of this card) & " (" & it & ")" & return after cardScripts
  246.     end if
  247.  
  248.     get script of this card
  249.     if it is empty then put "No card script." &  return into it
  250.     put it & return & deLim2 & return after cardScripts
  251.  
  252.     if (the number of card fields) <> 0 then readCardFields
  253.     else put "No card fields." & return & return & deLim2 & return after cardScripts
  254.     -- put deLim2 & return after cardScripts
  255.  
  256.     if (the number of card buttons) <> 0 then readCardButtons
  257.     else put "No card buttons." & return  & deLim2 & return after cardScripts
  258.     put deLim1 & return after cardScripts        --marks end of card
  259.     go next card            -- meaning, we end up on card 1
  260.   end repeat -- end of cards
  261. end readCards
  262.  
  263. on writeEm  -- returning to Script Reader with the scripts
  264.   global targetStack,totalCards,totalBacks,targetLongName,thisStack
  265.   global backScripts,cardScripts,deLim1,deLim2,targetShortName
  266.   go thisStack
  267.   go last card
  268.   answer "Got the scripts. Want to watch (slower)?" with "Yes" or "No"
  269.   if it is "yes" then
  270.     set lockScreen to false
  271.   else
  272.     go card 2
  273.     set lockScreen to false
  274.     set cursor to 4
  275.     set lockScreen to true
  276.     go last card
  277.   end if
  278.   -- =================debugging only
  279.   --doMenu "New Card"
  280.   --put backScripts into field "scriptfield"
  281.   --doMenu "New Card"
  282.   --put cardScripts into field "scriptfield"
  283.   -- =================end of debugging **
  284.   writeBackScripts
  285.   writeCardScripts
  286. end writeEm
  287.  
  288. on cleanUp
  289.   global thisStack
  290.   go card 2 of stack thisStack
  291.   set lockScreen to false
  292.   play flute
  293.   set lockMessages to false
  294.   answer "All done!"
  295.   visual dissolve
  296.   go next card -- the first card of the scripts
  297.   exit to hypercard
  298. end cleanUp
  299.  
  300. --  A special thanks to Sioux Lacy for help with debugging and of course to Bill Atkinson for making it possible.
  301. -- Thanks to John LeBourgeois for help with version 1.2
  302. -- The ‚Äúrecorder‚Äù icons at the bottom of the Reader are by Tim Oren we only use three, but the full set is attached. Thanks, Tim.
  303.  
  304. on makeDelim
  305.   global targetStack,deLim1,deLim2,targetShortName
  306.   -- deLim1 marks the end of the background or card
  307.   -- deLim2 marks the end of any object script
  308.   cursorwatch
  309.   put "‚Ä¢" into deLim1
  310.   repeat 3
  311.     put char(random(the number of chars in targetShortName)) of targetShortName after deLim1
  312.   end repeat
  313.   put "‚Ä¢" after deLim1
  314.   put "‚Ä¢‚Ä¢" into deLim2
  315.   repeat 3
  316.     put char(random(the number of chars in targetShortName)) of targetShortName after deLim2
  317.   end repeat
  318.   put "‚Ä¢‚Ä¢" after deLim2
  319. end makeDeLim
  320.  
  321. on readBackFields
  322.   -- ========= getting the background field scripts =========
  323.   global backScripts,deLim1,deLim2
  324.   repeat with j=1 to the number of fields      --of the current bkgnd
  325.     if the visible of bkgnd field j is false then put " [hidden]" into showing
  326.     else put " [visible]" into showing
  327.     get the short name of field j --form= field id ## or name
  328.     if word 3 of it is "id" then
  329.       put return & "Script of Background field " & j & ", " & "ID #" && (the short id of this background) & " (No Name)" & showing & return after backScripts
  330.     else
  331.       put return & "Script of Background field " & j & ", " & "ID #" && (the short id of field j) & " (" & it & ")" & showing & return after backScripts
  332.     end if
  333.     cursorwatch
  334.     get script of field j
  335.     if it is empty then put "No script." & return into it
  336.     put it & return & deLim2 & return after backScripts -- end of field script
  337.   end repeat --end of background fields
  338. end readBackFields
  339.  
  340. on readBackButtons
  341.   -- ============= getting the background button scripts =========
  342.   global backScripts,deLim2
  343.   repeat with k = 1 to (the number of bkgnd buttons)
  344.     if the visible of bkgnd button k is false then put " [hidden]" into showing
  345.     else put " [visible]" into showing
  346.     get the short name of bkgnd button k --form = bkgnd btn id # or name
  347.     if word 3 of it is "id" then
  348.       put return & "Script of Background button " & k & ", " & it & " (No Name)" & showing & return after backScripts
  349.     else
  350.       put return & "Script of Background button " & k & ", " & "ID #" && (the short id of bkgnd button k) & " (" & it & ")" & showing & return after backScripts
  351.     end if
  352.     cursorwatch
  353.     get script of bkgnd button k
  354.     if it is empty then put "No script." & return into it
  355.     put it & return & deLim2 & return after backScripts -- end of button script
  356.   end repeat --end of background buttons
  357. end readBackButtons
  358.  
  359. on readCardFields
  360.   --==================== card fields ===============
  361.   global cardScripts,deLim2
  362.   --deLim2 marks the end of the object
  363.  
  364.   repeat with j = 1 to the number of card fields
  365.     if the visible of card field j is false then put " [hidden]" into showing
  366.     else put " [visible]" into showing
  367.     get the short name of card field j --form= card fld id # or name
  368.     if word 3 of it is "id" then
  369.       put return & "Script of Card Field Number " & j & ", " & it & " (No name)" & showing & return after cardScripts
  370.     else
  371.       put return & "Script of Card Field Number " & j & ", " & "ID #" && (the short id of card field j) & " (" & it & ")" & showing & return after cardScripts
  372.     end if
  373.     cursorwatch
  374.     get script of card field j
  375.     if it is empty then put "No script." & return & return into it
  376.     put it & return & deLim2 & return after cardScripts
  377.   end repeat -- end of the number of card fields
  378. end readCardFields
  379.  
  380. on readCardButtons
  381.   --================= card buttons ==================
  382.  
  383.   global cardScripts,deLim2
  384.   repeat with k = 1 to (the number of buttons)
  385.     if the visible of card button k is false then put " [hidden]" into showing
  386.     else put " [visible]" into showing
  387.     get the short name of button k --form= card button id # or name
  388.     if word 3 of it is "id" then
  389.       put "Script of Button " & k & ", " & it & " (No Name)" & showing & return after cardScripts
  390.     else
  391.       put "Script of Button " & k & ", " & "ID #" && (the short id of button k) & " (" & it & ")" & showing & return after cardScripts
  392.     end if
  393.     cursorwatch
  394.     get script of button k
  395.     if it is empty then put "No script." into it
  396.     put it & return & deLim2 & return after cardScripts
  397.     -- end of button scripts
  398.   end repeat                                --end of buttons
  399. end readCardButtons
  400.  
  401. on writeBackScripts
  402.   global backScripts,deLim1,deLim2,totalBacks,newCardCount
  403.   global targetLongName
  404.   put 0 into newCardCount
  405.   repeat with kk = 1 to totalBacks
  406.     if the number of chars of char 1 to (offset (deLim1,backScripts)) of backScripts < 25000 then
  407.       doMenu "New Card"
  408.       cursorwatch
  409.       put newCardCount + 1 into newCardCount
  410.       if kk = 50 or kk = 100 or kk = 150 or kk = 200 then
  411.         push card
  412.         go home
  413.         pop card
  414.       end if
  415.       if newCardCount > 250 then
  416.         put 0 into newCardCount
  417.         doMenu "Compact Stack" -- to ensure a safe large stack
  418.       end if
  419.       --place the header
  420.       put targetLongName into field "StackNameField"
  421.       put line 1 of backScripts into field "objectNamefield"
  422.       put empty into line 1 of backscripts
  423.       put empty into char 1 of backscripts -- killing the return char
  424.       put char 1 to (offset (deLim1,backScripts)) of backScripts into field "scriptfield"
  425.       clearDelims
  426.       put empty into char 1 to (offset (deLim1,backscripts) + 5) of backScripts
  427.  
  428.     else -- there's too much for one card
  429.       repeat
  430.         doMenu "New Card"
  431.         cursorwatch
  432.         put newCardCount + 1 into newCardCount
  433.         if kk = 50 or kk = 100 or kk = 150 or kk = 200 then
  434.           push card
  435.           go home
  436.           pop card
  437.         end if
  438.         if newCardCount > 250 then
  439.           put 0 into newCardCount
  440.           doMenu "Compact Stack" -- to ensure a safe large stack
  441.         end if
  442.         --place the header
  443.         put targetLongName into field "StackNameField"
  444.         put line 1 of backScripts into field "objectNamefield"
  445.         put empty into line 1 of backscripts
  446.         put empty into char 1 of backscripts -- killing the return char
  447.         get char 1 to (offset (deLim2,backscripts)) of backScripts
  448.         if it is empty then
  449.           doMenu "Delete Card"
  450.           exit repeat --end of the background script(s)
  451.         end if
  452.         put it into field "scriptfield"
  453.         put empty into char 1 to (offset (deLim2,backscripts) + 8) of backScripts
  454.       end repeat
  455.     end if
  456.   end repeat -- no more backgrounds
  457. end writeBackScripts
  458.  
  459. on writeCardScripts
  460.   global cardScripts,deLim1,deLim2,totalCards,newCardCount,targetLongName
  461.   put 0 into newCardCount
  462.   repeat with kk = 1 to totalCards
  463.     --put "Heapspace =" && the heapspace & "; repeats =" && kk --**
  464.     if the number of chars of char 1 to (offset (deLim1,cardScripts)) of cardScripts < 25000 then
  465.       doMenu "New Card"
  466.       cursorwatch
  467.       put newCardCount + 1 into newCardCount
  468.       if newCardCount > 250 then
  469.         put 0 into newCardCount
  470.         doMenu "Compact Stack" -- to ensure a safe large stack
  471.       end if
  472.       --place the header
  473.       put targetLongName into field "StackNameField"
  474.       put line 1 of cardScripts into field "objectNamefield"
  475.       put empty into line 1 of cardscripts -- out of memory here**
  476.       put empty into char 1 of cardscripts -- killing the return char
  477.       put char 1 to (offset (deLim1,cardscripts)) of cardscripts into field "scriptfield"
  478.       clearDelims
  479.       put empty into char 1 to (offset (deLim1,cardscripts) + 5) of cardScripts
  480.  
  481.     else -- there's too much for one card
  482.       repeat
  483.         doMenu "New Card"
  484.         cursorwatch
  485.         put newCardCount + 1 into newCardCount
  486.         if newCardCount > 250 then
  487.           put 0 into newCardCount
  488.           doMenu "Compact Stack" -- to ensure a safe large stack
  489.         end if
  490.         --place the header
  491.         put targetLongName into field "StackNameField"
  492.         put line 1 of cardscripts into field "objectNamefield"
  493.         put empty into line 1 of cardscripts
  494.         put empty into char 1 of cardscripts -- killing the return char
  495.         get char 1 to (offset (deLim2,cardscripts)) of cardscripts
  496.         if it is empty then
  497.           doMenu "Delete Card"
  498.           exit repeat --end of the card script(s)
  499.         end if
  500.         put it into field "scriptfield"
  501.         put empty into char 1 to (offset (deLim2,cardscripts) + 8) of cardscripts
  502.       end repeat
  503.     end if
  504.   end repeat -- no more cards
  505. end writeCardScripts
  506.  
  507. on clearDelims
  508.   get field "scriptfield"
  509.   put the number of lines of it into flexNum
  510.   repeat with m = the number of lines of field "scriptfield" down to 1
  511.     if line m of it contains "‚Ä¢" then
  512.       delete line m of it
  513.     end if
  514.   end repeat
  515.   put it into field "scriptfield"
  516. end clearDelims
  517.  
  518. on moveUp
  519.   put line 11 of field "scriptfield" & return into temp
  520.   put line 12 of field "scriptfield" after temp
  521.   put empty into field "scriptfield"
  522.   put temp into field "scriptfield"
  523. end moveUp
  524.  
  525. on cursorWatch
  526.   --cursNum is the # of the CURS resource in this stack
  527.   repeat with cursNum = 1009 down to 1000
  528.     set cursor to cursNum
  529.     if cursNum = 1008 then set cursor to 1009
  530.   end repeat
  531. end cursorWatch
  532.  
  533.